package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import factory.FactoriaConcreta;

import modelo.Categoria;
import modelo.Ingrediente;
import modelo.Producto;
import vista.VentanaProducto;


public class ControladorProducto implements ActionListener{

    private VentanaProducto vista;
    private modelo.Producto modelo;
    private LinkedList<Categoria> categorias;
    private LinkedList<modelo.Producto> productos;
    private LinkedList<Ingrediente> ingredientes;
	private FactoriaConcreta factori;

    public ControladorProducto(VentanaProducto aThis) {
        vista=aThis;
        factori= new FactoriaConcreta();
        modelo= factori.crearProducto();
        categorias= factori.crearCategoria().consultarGeneral();
        productos = factori.crearProducto().consultarGeneral();
        ingredientes= factori.crearIngrediente().consultarGeneral();
        cargarDescripciones();
        vista.addListener(this);
        
    }


    public void cargarDescripciones(){
        LinkedList<String> descripciones = new LinkedList<String>();
        for (int i = 0; i < ingredientes.size(); i++)
            descripciones.add(ingredientes.get(i).getDescripcion());
        vista.cargarComboIngrediente(descripciones);
        descripciones = new LinkedList<String>();
        for (int i = 0; i < categorias.size(); i++)
            descripciones.add(categorias.get(i).getDescripcion());
        vista.cargarComboCategoria(descripciones);
    }

     public int buscarCodigoProducto(String descripicion){
        for (int i = 0; i < productos.size(); i++)
            if(productos.get(i).getDescripcion().equals(descripicion))
                return productos.get(i).getCodigo();
        return -1;
    }

     public int buscarCodigoCategoria(String descripicion){
        for (int i = 0; i < categorias.size(); i++)
            if(categorias.get(i).getDescripcion().equals(descripicion))
                return categorias.get(i).getCodigo();
        return -1;
     }
     
     public int buscarCodigoIngrediente(String descripicion){
        for (int i = 0; i < ingredientes.size(); i++)
            if(ingredientes.get(i).getDescripcion().equals(descripicion))
                return ingredientes.get(i).getCodigo();
        return 0;
     }

     public void actionPerformed(ActionEvent ae) {
         System.out.println(ae.getActionCommand());
        if(ae.getActionCommand().equals("Registrar")){
            System.out.println("abcdefghijkl");
                registrar();
        }
        else if(ae.getActionCommand().equals("Salir")){
            vista.setVisible(false);
            vista.limpiar();
        }
        else if(ae.getActionCommand().equals("Mas")){
            if(vista.validarCantidad())
                vista.agregarFila(vista.getRegistro());
        }
        else if(ae.getActionCommand().equals("Menos")){
            vista.menos();
        }
        else{
            vista.limpiar();
        }
    }

    private void registrar() {
     System.out.println("sssssssssssss");
       if(vista.hayVacios()){
         if(vista.validoNumeros())
        	 System.out.println("ssssssssssss");
         modelo.setCodigo(Integer.parseInt(vista.getTxtCodigo().getText()));
         modelo.setDescripcion(vista.getTxtDescripcion().getText());
         modelo.setEstatus("A");
         modelo.setPrecio(Float.parseFloat(vista.getTxtPrecio().getText()));
         modelo.setCodigoCategoria(buscarCodigoCategoria(vista.getTextoCmbCategoria()));
         if(modelo.registrar()){
          LinkedList<Integer> c = new LinkedList<Integer>();
          LinkedList<Float> p = new LinkedList<Float>();
          LinkedList<String []> f= vista.getInfoTabla();
          for (String[] s : f) {
           c.add(buscarCodigoIngrediente(s[0]));
           p.add(Float.parseFloat(s[1]));
           }
         modelo.registarIngredientes(c, p);
         vista.limpiar();
          JOptionPane.showMessageDialog(new JFrame(),"Producto registrado exitosamente","BD2-5",JOptionPane.INFORMATION_MESSAGE);
         vista.limpiar();
        }
       else
         JOptionPane.showMessageDialog(new JFrame(),"El codigo ya se encuentra registrada","BD2-5",JOptionPane.INFORMATION_MESSAGE);
      }

    }
    

}
